package com.sybil.ot.dao;

import com.sybil.ot.dominio.Pedido;
import com.sybil.ot.dominio.PedidoPK;
import com.sybil.ot.dominio.Solicitud;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

@Repository("pedidoDAO")
public class PedidoDAO extends AbstractDAO<Pedido, PedidoPK> {

   public PedidoDAO() {
      super(Pedido.class);
   }

   public Pedido obtenerPedido(PedidoPK clave) {
      return obtener(clave);
   }

   public Pedido obtenerPedido(String serie, int numero) {
      return obtener(new PedidoPK(serie, numero));
   }

   public List<Pedido> obtenerPedidos() {
      Criteria c = sesionActual().createCriteria(Pedido.class);
      c.addOrder(Order.desc("llave.numero"));
      return c.list();
//      return obtener();
   }

   public void guardarPedido(Pedido pedido) {
      guardar(pedido);
   }

   public void editarPedido(Pedido pedido) {
      editar(pedido);
   }

   public void eliminarPedido(Pedido pedido) {
      eliminar(pedido);
   }

   public Integer obtenerSecuencia(String serie) {
      Integer siguiente = 0;
      Query query = sesionActual().getNamedQuery("Pedido.maxPorSerie")
              .setString("serie", serie);
      List list = query.list();
      Object get = list.get(0);
      if (get != null) {
         siguiente = (Integer) list.get(0);
      }
      siguiente++;
      return siguiente;
   }

   public Pedido obtenerPedidoSolicitud(String claveFlujo, int numeroSolicitud) {
      Criteria c = sesionActual().createCriteria(Pedido.class);
      c.add(Restrictions.eq("solicitud", new Solicitud(claveFlujo, numeroSolicitud)));
      List list = c.list();
      return (Pedido) (list.isEmpty() ? null : list.get(0));
   }
}
